import request from "@/request";
import type { responseType } from "./interface";

const prefix = "/userEntity";

// 参数接口
export interface UpdateUserParams {
  id?: number;
  acc?: string;
  pwd?: string;
  name?: string;
  avatar?: string;
  idcard?: string;
  sex?: string;
  age?: number;
  birth?: string;
  address?: string;
  phone?: string;
  qq?: string;
  wechat?: string;
  role?: number;
  academicId?: number;
  dormitory?: number;
  dormitoryRoom?: number;
  dormitoryRoomNum?: number;
  office?: number;
  officeRoom?: number;
  officeRoomNum?: number;
  graduate?: number;
  startStudy?: string;
  endStudy?: string;
  diploma?: number;
  createBy?: string;
  createTime?: Record<string, unknown>;
  updateBy?: string;
  updateTime?: Record<string, unknown>;
  undock?: number;
  state?: number;
  remark?: string;
}

/**
 * 修改
 * @param {object} params $!{table.comment}
 * @param {number} params.id 编号
 * @param {string} params.acc 账号&工号
 * @param {string} params.pwd 密码
 * @param {string} params.name 名称
 * @param {string} params.avatar 头像
 * @param {string} params.idcard 身份证号
 * @param {string} params.sex 性别
 * @param {number} params.age 年龄
 * @param {string} params.birth 生日
 * @param {string} params.address 家庭住址
 * @param {string} params.phone 联系电话
 * @param {string} params.qq QQ
 * @param {string} params.wechat 微信
 * @param {number} params.role 角色
 * @param {number} params.academicId 学院
 * @param {number} params.dormitory 宿舍栋
 * @param {number} params.dormitoryRoom 宿舍房间
 * @param {number} params.dormitoryRoomNum 宿舍床号
 * @param {number} params.office 办公室栋
 * @param {number} params.officeRoom 办公室
 * @param {number} params.officeRoomNum 办公室号
 * @param {number} params.graduate 是否毕业
 * @param {string} params.startStudy 入学年份
 * @param {string} params.endStudy 毕业年份
 * @param {number} params.diploma 专科-1本科-2研究生-3
 * @param {string} params.createBy 创建者
 * @param {object} params.createTime 创建时间
 * @param {string} params.updateBy 更新者
 * @param {object} params.updateTime 更新时间
 * @param {number} params.undock 伪删除
 * @param {number} params.state 状态
 * @param {string} params.remark 备注
 * @returns
 */
export function updateUser(params: UpdateUserParams): Promise<responseType> {
  return request.post(`${prefix}/update`, params);
}

/**
 * 查询-名称
 * @param {string} param
 * @returns
 */
export function selectUserByName(param: string): Promise<responseType> {
  return request.post(`${prefix}/selectUserByName/${param}`);
}

/**
 * 查询-编号
 * @param {string} param
 * @returns
 */
export function selectUserByID(param: string): Promise<responseType> {
  return request.post(`${prefix}/selectUserByID/${param}`);
}

/**
 * 查询-账号
 * @param {string} param
 * @returns
 */
export function selectUserByAcc(param: string): Promise<responseType> {
  return request.post(`${prefix}/selectUserByAcc/${param}`);
}

/**
 * 列表-分页
 * @param {number} page
 * @param {number} pageSize
 * @param {number} role
 * @returns
 */
export function listPageUser(
  page: number,
  pageSize: number,
  role?: number
): Promise<responseType> {
  return request.post(
    `${prefix}/listPageUser?page=${page}&pageSize=${pageSize}&role=${role}`
  );
}

// 参数接口
export interface InsertUserParams {
  id?: number;
  acc?: string;
  pwd?: string;
  name?: string;
  avatar?: string;
  idcard?: string;
  sex?: string;
  age?: number;
  birth?: string;
  address?: string;
  phone?: string;
  qq?: string;
  wechat?: string;
  role?: number;
  academicId?: number;
  dormitory?: number;
  dormitoryRoom?: number;
  dormitoryRoomNum?: number;
  office?: number;
  officeRoom?: number;
  officeRoomNum?: number;
  graduate?: number;
  startStudy?: string;
  endStudy?: string;
  diploma?: number;
  createBy?: string;
  createTime?: Record<string, unknown>;
  updateBy?: string;
  updateTime?: Record<string, unknown>;
  undock?: number;
  state?: number;
  remark?: string;
}

/**
 * 保存
 * @param {object} params $!{table.comment}
 * @param {number} params.id 编号
 * @param {string} params.acc 账号&工号
 * @param {string} params.pwd 密码
 * @param {string} params.name 名称
 * @param {string} params.avatar 头像
 * @param {string} params.idcard 身份证号
 * @param {string} params.sex 性别
 * @param {number} params.age 年龄
 * @param {string} params.birth 生日
 * @param {string} params.address 家庭住址
 * @param {string} params.phone 联系电话
 * @param {string} params.qq QQ
 * @param {string} params.wechat 微信
 * @param {number} params.role 角色
 * @param {number} params.academicId 学院
 * @param {number} params.dormitory 宿舍栋
 * @param {number} params.dormitoryRoom 宿舍房间
 * @param {number} params.dormitoryRoomNum 宿舍床号
 * @param {number} params.office 办公室栋
 * @param {number} params.officeRoom 办公室
 * @param {number} params.officeRoomNum 办公室号
 * @param {number} params.graduate 是否毕业
 * @param {string} params.startStudy 入学年份
 * @param {string} params.endStudy 毕业年份
 * @param {number} params.diploma 专科-1本科-2研究生-3
 * @param {string} params.createBy 创建者
 * @param {object} params.createTime 创建时间
 * @param {string} params.updateBy 更新者
 * @param {object} params.updateTime 更新时间
 * @param {number} params.undock 伪删除
 * @param {number} params.state 状态
 * @param {string} params.remark 备注
 * @returns
 */
export function insertUser(params: InsertUserParams): Promise<responseType> {
  return request.post(`${prefix}/insert`, params);
}

/**
 * 导入数据
 * @param {string} file
 * @returns
 */
export function importExcelUser(file: object): Promise<responseType> {
  return request.post(`${prefix}/importExcel`, file);
}

/**
 * 导出数据
 * @returns
 */
export function exportExcelUser(): Promise<responseType> {
  return request.post(
    `${prefix}/exportExcel`,
    {},
    {
      responseType: "blob",
    }
  );
}

/**
 * 删除
 * @param {string} param
 * @returns
 */
export function deleteUser(param: string): Promise<responseType> {
  return request.post(`${prefix}/delete/${param}`);
}

/**
 * 查询-教师名称
 * @param {string} param
 * @returns
 */
export function selectTeacherByName(param: string): Promise<responseType> {
  return request.post(`${prefix}/queryTeacherByName/${param}`);
}

/**
 * 查询-学号、名字双重模糊查询
 * @param {string} param
 * @returns
 */
export function selectStudentByName(param: string): Promise<responseType> {
  return request.post(`${prefix}/queryUserByNameOrNo/${param}`);
}
